#!/usr/bin/env python3
"""
MyPackage 演示脚本
展示各种 __init__.py 用法和功能
"""

import sys
import os

# 确保能够导入mypackage模块
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

def main():
    print("=" * 60)
    print("欢迎使用 MyPackage 演示程序")
    print("=" * 60)
    
    # 1. 导入包（会触发 __init__.py 中的初始化代码）
    print("\n1. 导入包...")
    import mypackage
    
    print(f"包版本: {mypackage.__version__}")
    print(f"包作者: {mypackage.__author__}")
    
    # 2. 使用核心功能
    print("\n2. 使用核心功能...")
    
    # 创建引擎实例
    engine = mypackage.Engine("DemoEngine")
    engine.start()
    
    # 处理数据
    result = engine.process("Hello World")
    print(f"引擎处理结果: {result}")
    
    # 创建处理器实例
    processor = mypackage.Processor("uppercase")
    text_result = processor.process_text("python is awesome")
    print(f"文本处理结果: {text_result}")
    
    # 3. 使用工具函数
    print("\n3. 使用工具函数...")
    
    # 验证输入
    is_valid = mypackage.validate_input("test@example.com", str, 5, 50)
    print(f"输入验证结果: {is_valid}")
    
    # 验证邮箱
    email_valid = mypackage.validate_email("test@example.com")
    print(f"邮箱验证结果: {email_valid}")
    
    # 格式化输出
    data = {"name": "MyPackage", "version": "1.0.0", "status": "active"}
    formatted = mypackage.format_output(data, "pretty")
    print(f"格式化输出:\n{formatted}")
    
    # 4. 使用插件系统
    print("\n4. 使用插件系统...")
    
    # 获取插件管理器
    plugin_mgr = mypackage.plugin_manager
    
    # 列出所有插件
    plugins = plugin_mgr.list_plugins()
    print(f"已加载的插件: {plugins}")
    
    # 使用文本处理插件
    plugin_a = plugin_mgr.get_plugin('plugin_a')
    if plugin_a:
        text_processed = plugin_a.plugin_instance.process_text("Hello Plugin", "reverse")
        print(f"插件A处理结果: {text_processed}")
        
        word_count = plugin_a.plugin_instance.word_count("Hello World from Plugin")
        print(f"单词统计: {word_count}")
    
    # 使用数学计算插件
    plugin_b = plugin_mgr.get_plugin('plugin_b')
    if plugin_b:
        calc_result = plugin_b.plugin_instance.calculate("sqrt(16) + 2 * 3")
        print(f"插件B计算结果: {calc_result}")
        
        stats = plugin_b.plugin_instance.basic_stats([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
        print(f"统计结果: {stats}")
    
    # 5. 演示 from package import * 的行为
    print("\n5. 演示 from package import * 的行为...")
    
    # 创建一个新的作用域来测试
    exec_globals = {}
    exec("from mypackage import *", exec_globals)
    
    # 显示导入的符号
    imported_symbols = [name for name in exec_globals.keys() 
                       if not name.startswith('__')]
    print(f"通过 'from mypackage import *' 导入的符号: {imported_symbols}")
    
    # 6. 运行测试
    print("\n6. 运行测试...")
    
    # 导入并运行测试
    from mypackage.tests import run_all_tests
    run_all_tests()
    
    # 7. 展示包的层次结构
    print("\n7. 包的层次结构...")
    
    # 展示不同的导入方式
    print("不同的导入方式:")
    print("- 直接导入: from mypackage import Engine")
    print("- 子模块导入: from mypackage.core import Engine")
    print("- 完整路径导入: from mypackage.core.engine import Engine")
    
    # 演示相对导入的效果
    print("\n通过 __init__.py 简化的导入路径:")
    print("- mypackage.Engine (而不是 mypackage.core.engine.Engine)")
    print("- mypackage.validate_input (而不是 mypackage.utils.validators.validate_input)")
    
    engine.stop()
    print("\n=" * 60)
    print("演示完成！")
    print("=" * 60)

if __name__ == "__main__":
    main() 